
package com.lolaage.tracks.content;

import java.io.File;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Environment;
import android.util.Log;

/*******************************************************
 * @author: zhaohua
 * @version: 2011-9-23
 * @see: 操作主要数据库的帮助类
 * @Copyright: copyrights reserved by personal 2007-2012
 *******************************************************/
class DatabaseHelper extends SQLiteOpenHelper
{
	protected static String DB_NAME = "main.db";
	protected static String FILE_SAVE_ROOT = "/mytracks/";
	
	/** 
	 * 数据库根据新旧版本号的差值dela进行修改数据库
	 * 1.dela < 0  :不向上 兼容, delete
	 * 2.dela == 0 :当前版本不修改
	 * 3.deta == 1 :向后兼容一个版本，alter
	 * 4.deta >1   :无法兼容，delete
	 * */
	private static int version = 11;

	public DatabaseHelper(Context context)
	{
		this(context, getDBPath(context, false, DB_NAME), null, version);
	}

	public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
	{
		super(context, name, factory, version);
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		// 创建表和视图
		initTable(db);
		
		// 初始化数据
		initData(db);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{
		int deta = newVersion - oldVersion;
		
		// 没有变化
		if(deta == 0)
		{
			return;
		}
		
		// 不做向上兼容, 或者 向下无法兼容 , 删除直接修改
		if(deta < 0 || deta > 1 )
		{			
			cleanUpDatabase(db);		
			onCreate(db);
			return;
		}
		
		// 兼容,修改表		
		if(deta == 1)
		{			
			alterTable(db);
			return;
		}
	}
	
	/** 创建表和视图*/
	private void initTable(SQLiteDatabase db)
	{
	    db.execSQL(TracksDB.SQL_CREATE);
	    db.execSQL(TrackPointsDB.SQL_CREATE);
	}
	
	/** 更新修改表*/
	private void alterTable(SQLiteDatabase db)
	{
		
	}
	
	/** 初始化数据*/
	private void initData(SQLiteDatabase db)
	{		
	    
	}
	
	/** 删除表 */
	private void cleanUpDatabase(SQLiteDatabase db)
	{
	    db.execSQL("DROP TABLE if exists " + TracksDB.TABLE_NAME);
	    db.execSQL("DROP TABLE if exists " + TrackPointsDB.TABLE_NAME);
	}
	
	/**
	 * 获取数据库的存放路径，策略为
	 * 1.有卡，则主DB存放在应用程序的目录下，辅DB防止卡的目录下。
	 * 2.无卡，则主辅DB都放在应用程序目录下。
	 * @return
	 */
	public static String getDBPath(Context context, boolean mainAble, String dbName)
	{
		// 2.2 之前的版本 数据库不能传路径
		if(android.os.Build.VERSION.SDK_INT < 8)
		{
			return dbName;
		}
		if(Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
		{
			// 有卡
			if(mainAble)
			{
				return context.getDatabasePath(dbName).getAbsolutePath();
			}else
			{
				String path = Environment.getExternalStorageDirectory().getAbsolutePath();
				path += FILE_SAVE_ROOT + "databases/";
				
				File dir = new File(path);
				if (!dir.exists())
				{
					if (!dir.mkdirs())
					{
						Log.e("dbhelper", "--->create databases dir fail!");
						return null;
					}
				}
				return path + dbName;
			}
		}else
		{
			// 无卡
			return context.getDatabasePath(dbName).getAbsolutePath();
		}
	}
}
